package org.inspiration.dudu.user.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.inspiration.dudu.user.model.dto.UserFavoriteDTO;
import org.inspiration.dudu.user.model.entity.UserFavoriteEntity;

import java.util.List;

/**
 * 用户收藏映射器接口，提供对用户收藏数据的基本操作。
 */
@Mapper
public interface UserFavoriteMapper extends BaseMapper<UserFavoriteEntity> {
    
    /**
     * 创建用户收藏记录。
     *
     * @param userFavoriteEntity 用户收藏实体
     */
    @Insert("insert into user_favorite(user_id, content_id, content_type, folder_id) " +
            "VALUES (#{userId}, #{contentId}, #{contentType}, #{folderId})")
    void createUserFavorite(UserFavoriteEntity userFavoriteEntity);

    /**
     * 删除用户收藏记录。
     *
     * @param userFavoriteDTO 用户收藏数据传输对象
     */
    @Delete("delete from user_favorite where user_id = #{userId} and content_id = #{contentId}" +
            "and content_type = #{contentType} and folder_id = #{folderId}")
    void deleteUserFavorite(UserFavoriteDTO userFavoriteDTO);

    /**
     * 检查用户是否收藏了特定内容。
     *
     * @param userId 用户ID
     * @param contentId 内容ID
     * @return 收藏数量
     */
    @Select("select count(*) from user_favorite where user_id = #{userId} and content_id = #{contentId}")
    int isFavorite(Long userId, String contentId);

    /**
     * 获取用户在特定文件夹中的收藏记录。
     *
     * @param userId 用户ID
     * @param favoriteFolderId 收藏文件夹ID
     * @param offset 偏移量
     * @param pageSize 页面大小
     * @return 用户收藏实体列表
     */
    @Select("select * from user_favorite where user_id = #{userId} and folder_id = #{favoriteFolderId} order by favorited_at desc limit #{offset}, #{pageSize}")
    List<UserFavoriteEntity> getUserFavorites(Long userId, Long favoriteFolderId, Integer offset, Integer pageSize);

    /**
     * 检查用户在特定文件夹中是否收藏了特定内容。
     *
     * @param userId 用户ID
     * @param contentId 内容ID
     * @param folderId 文件夹ID
     * @return 收藏数量
     */
    @Select("select count(*) from user_favorite where user_id = #{userId} and content_id = #{contentId} and folder_id = #{folderId}")
    int isFolderFavorite(Long userId, String contentId, Long folderId);
}
